<?php
use Swoole\Coroutine as Co;

go(function() {
    go(function () {
        co::sleep(3.0);
        go(function () {
            co::sleep(2.0);
            echo "co[3] end\n";
        });
        echo "co[2] end\n";
    });
    //co::sleep(1.0);
    echo "co[1] end\n";
});

return;

Swoole\Coroutine::set(array(
    'max_coroutine' => 4096,
));

$c1=new Co\Channel(1);

//生产者
go(function () use($c1){
    //1.从mysql当中,从redis当中获取数据,加入到通道当中
    //2.充分利用Io时间,让cpu去处理其它的协程
    //3.进程是可以同时执行,但是协程是串行

    while (1){
        co::sleep(1);
        $data=[
            'rand'=>mt_rand(1000,99999)
        ];
        $c1->push($data);
    }
});


//生产者
go(function () use($c1){
    //1.从mysql当中,从redis当中获取数据,加入到通道当中
    //$c1->push();
    while (1){
        co::sleep(1);
        $data=[
            'rand'=>mt_rand(1000,99999)
        ];
        $c1->push($data);
    }

});



//消费者
go(function ()use($c1){
    //通道当中获取

    while (1){
        var_dump($c1->pop());
    }

});

//消费者
go(function (){
    //通道当中获取



});